﻿#region MIT Licenze
//The MIT License

//Copyright (c) 2008 Sebastian Faltoni, Riccardo Marzi, dotnetfireball.org

//Permission is hereby granted, free of charge, to any person obtaining a copy
//of this software and associated documentation files (the "Software"), to deal
//in the Software without restriction, including without limitation the rights
//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//copies of the Software, and to permit persons to whom the Software is
//furnished to do so, subject to the following conditions:

//The above copyright notice and this permission notice shall be included in
//all copies or substantial portions of the Software.

//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//THE SOFTWARE.
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Ionic.Utils.Zip;

namespace Fireball.Extensions
{
    public static class DirectoryExtensions
    {
        /// <summary>
        /// Get Inner Path Part from their parent
        /// </summary>
        /// <param name="dir">The current dir</param>
        /// <param name="parent">The parent</param>
        /// <returns>The path part</returns>
        public static string PathFromParent(this DirectoryInfo dir, DirectoryInfo parent)
        {
            if (dir.FullName == parent.FullName)
                return Path.DirectorySeparatorChar.ToString();

            StringBuilder sb = new StringBuilder();
            DirectoryInfo p = dir;


            while (true)
            {
                sb.Insert(0, p.Name);
                sb.Insert(0, Path.DirectorySeparatorChar.ToString());
                p = p.Parent;

                if (p.FullName == parent.FullName)
                    break;
                if (p.Parent == null)
                    break;
            }
            return sb.ToString();
        }

        /// <summary>
        /// Compress the dir content's on the destination zip File
        /// </summary>
        /// <param name="dir">The dir to compress</param>
        /// <param name="destZipFile">The destination zip file</param>
        public static void ZipDirectory(this DirectoryInfo dir, FileInfo destZipFile)
        {
            string rootPath = dir.FullName;

            using (ZipFile zipFile = new ZipFile(destZipFile.FullName))
            {
                zipFile.AddDirectory(dir.FullName);
                zipFile.Save();
            }
        }        
    }
}
